package handlers;

import mapControl.GraphicsMapControl;
import actions.MoveBackwardAction;
import actions.MoveForwardAction;
import actions.MoveLeftAction;
import actions.MoveRightAction;
import actions.PlatarBomba;

import com.jme.input.InputHandler;
import com.jme.input.KeyBindingManager;
import com.jme.input.KeyInput;
import com.jme.input.action.KeyInputAction;

import elementos.Player;

/**
 * 
 * Manejador de teclas para JDM. Este control recibe como parametro el jugador, una referencia
 * al control del mapa. Permite que el jugador se mueva para adelante y para atras y que rote hacia 
 * los costados
 * 
 * @author Sebastian Giulietti 69032 
 * @author Adrian Sanchez 64251
 * 
 */
public class KeyHandler extends InputHandler {

	/**
	 * Simplemente le pasa el nodo a controlar y las acciones
	 */
	public KeyHandler(Player player, GraphicsMapControl mapControl) {
		setKeyBindings();
		setActions(player, mapControl);
	}

	/**
	 * Se asignan los "disparadores" que son los eventos que causaran las acciones
	 * 
	 * @param mapControl
	 * @param player
	 * 
	 */
	private void setActions(Player player, GraphicsMapControl mapControl) {

		PlatarBomba plantar = new PlatarBomba(player, mapControl);
		addAction(plantar, "plantar", false);

		KeyInputAction forward = new MoveForwardAction(player, mapControl);
		addAction(forward, "forward", false);

		KeyInputAction backward = new MoveBackwardAction(player, mapControl);
		addAction(backward, "backward", false);

		KeyInputAction rotateRight = new MoveRightAction(player, mapControl);
		addAction(rotateRight, "turnRight", false);

		KeyInputAction rotateLeft = new MoveLeftAction(player, mapControl);
		addAction(rotateLeft, "turnLeft", false);
	}

	/**
	 * crea un objeto teclado y le asigna los objetos-acciones a ejecutar
	 * en cada evento
	 * 
	 */
	private void setKeyBindings() {
		KeyBindingManager keyboard = KeyBindingManager.getKeyBindingManager();
		keyboard.set("forward", KeyInput.KEY_W);
		keyboard.set("backward", KeyInput.KEY_S);
		keyboard.set("turnRight", KeyInput.KEY_D);
		keyboard.set("turnLeft", KeyInput.KEY_A);
		keyboard.set("plantar", KeyInput.KEY_RETURN);
	}
}
